package dependenceInversion;

/**
 * @Author: 蔡翔
 * @Date: 2019/11/8 16:15
 * @Version 1.0
 *
 * 核心思想：面向接口编程
 * 依赖倒置原则：高层次的模块不应该依赖低层次的模块。
 */
public class Test {
    public static void main(String[] args) {
        //1.传统方式
        /*Geely geely = new Geely();
        geely.studyFECourse();
        geely.studyJavaCourse();*/

        //2.依赖倒置 设计模式 （接口方法注入方式）
        /*Geely geely = new Geely();
        //studyImoocCourse(ICourse iCourse)需要 一个接口类型的ICourse，实现了ICourse接口 的类也是可以的。
        geely.studyImoocCourse(new JavaCourse());
        geely.studyImoocCourse(new FECourse());
        */

        /*
        //3.依赖倒置 设计模式(完善)
        Geely geely = new Geely(new PythonCourse());
        geely.studyImoocCourse();*/

        //4. 因为javaee 都是通过DAO层依赖注入进来的，学什么课程set一下，然后调用study一下
        Geely geely = new Geely();
        geely.setiCourse(new JavaCourse());
        geely.studyImoocCourse();

        geely.setiCourse(new FECourse());
        geely.studyImoocCourse();
    }

}